lettres gantes pour Sharp PC1500 ( pas de programme )
tir du magazine Hebdogiciel N42

	La possibilit d'imprimer des lettres gantes dans le sens vertical sur l'imprimante du PC1500 est trs intressante, mais on peut regretter que la taille des lettres devienne alors disproportionne par rapport  la largeur du trait, l'impression de caractres gras tant impossible.
	Ce programme permet de s'affranchir de cette limitation, et d'crire toutes sortes de caractres gras ou largis avec une grande facilit. Le principe est simple : chaque lettre est imprime plusieurs fois en tant dcale  chaque fois de 0.2mm en largeur aussi bien qu'en hauteur. Il est possible de choisir indpendamment l'paisseur de la lettre en largeur et en hauteur, ce qui permet de nombreux effets. Notons toutefois que le nombre total d'impressions est gal au nombre d'impressions en largeur multipli par le nombre d'impressions en hauteur, ce qui augmente considrablement le temps d'excution;ainsi, pour imprimer une lettre dont l'paisseur dans tous les sens serait quintuple de la normale, il faudrait 25 fois plus de temps que pour l'impression d'une lettre normale.
	Le programme permet un grand nombre de facilits : on peut introduire un message entier avant de l'imprimer ( jusqu' plus de 700 caractres sans extension mmoire ); tous les caractres peuvent tre utiliss, et mme certains qui ne sont pas accessibles par le clavier; du reste, on dispose de 36 tailles de caractres et non seulement 10 ( la taille 36 est la plus grasse qui puisse tre imprime sans que certains caractres soient tronqus ). Le texte peut tre modifi  volont avant l'impressions.
	Le PC1500 commence par demander la taille des caractres, entre 1 et 36 ( il est possible d'aller jusqu' 255, mais les caractres ne pourront tre imprims en entier ); ensuite, il demande l'paisseur ( nombre d'impressions en hauteur ) puis la largeur et le dcalage par rapport au milieur du papier ( il n'est pas ncessaire de rpondre si l'on dsire un dcalage nul, le texte tant alors parfaitement centr quelle que soit la taille des caractres ). A chaque demande, le programme indique la limite  ne pas dpasser pour une impression correcte ( il est par exemple absurde de vouloir imprimer en paisseur triple un caractre de taille 1, le rsultat tant parfaitement illisible ). Aprs cela, le texte peut tre introduit. Les touches SMALL et SHIFT s'utilisent normalement, et les caractres introduits apparaissent  droite de l'cran, et dcals  chaque fois. La longueur du texte n'est limite que par la taille de la mmoire disponible ( et la longueur du papier ). Les touches d'dition < et > permettent de dplacer le texte et ainsi, de modifier un caractre : le caractre qui sera modifi est celui qui se trouve immdiatement aprs le dernier caractre affich. Notons qu'aprs s'tre ainsi dplac  volont, on doit retourner  la position initiale avant d'imprimer le texte : en effet, le texte ne s'imprime que jusqu'au dernier caractre affich. Par ailleurs, il n'est pas possible d'utiliser les touches d'insertion ou d'effacement, mais une astuce permet d'y remdier : si l'on appuie sur la touche DEF, un caractre d'insertion s'inscrit, mais ne sera pas imprim;si on le met  la place d'un autre caractre, celui-ci sera donc effac. D'autre part, on peut introduire de tels caractres dans le texte de temps en temps pour pouvoir ensuite effectuer des insertions sans trop de difficults. Ce programme fait souvent appel  des POKE qu'il est intressant d'expliquer. Les lignes 2  7 correspondent  la demande des diffrents paramtres. La ligne 8 initialise les indicateurs SHIFT et SMALL par un POKE &704E. Le programme dbute toujours en mode majuscule. L'tat de ces deux indicateurs sera ensuite mmoris dans les variables W et V. L'adresse &7864 contient la partie haute de l'adresse du dernier octet disponible, qui dpend des extensions mmoires. Le texte sera mmoris en descendant  partir de cette adresse,  la place normalement rserve aux mmoires.

Les lignes 9  11 initialisent le SHIFT et permettent d'attendre l'introduction d'un caractre, puis d'appeler l'impression du texte ( lignes 40 et suivantes ) si la touche enfonce est ENTER.
les lignes 12  13 : appel du dfilement du texte dans un sens ou dans l'autre si l'on a appuy sur < ou >.
ligne 14 : mmorisation des caractres correspondant aux touches de rservation.
ligne 15 : appel du sous-programme "changement de couleur"
lignes 16 et 17 : modification des indicateurs aprs appui sur SHIFT ou SMALL
lignes 18  24 : transformation des caractres par le mode SHIFT
ligne 30 : mmorisation d'un caractre d'insertion
ligne 32 : abandon ( touche OFF )
ligne 33 : mise en mmoire du dernier caractre introduit
lignes 40  42 : impression
lignes 45  47 : dcalage de l'affichage
lignes 50 et 51 : changement de couleur
lignes 60  62 : contrle de l'affichage

Programme :
2 "=":WAIT 0:CLS:Z=9:GRAPH:ROTATE 1:INPUT "dimension (1  36) ?";Z
3 Z=INT ABS Z:POKE &79F4,Z:PRINT "paisseur (1 ";Z-(Z>31)*7*(Z-31);") ";:INPUT Y
4 CLS:Y=ABS Y:X=Y:PRINT "largeur (1 ";Z;") ";:INPUT X
5 CLS:X=ABS X:GOSUB 50
6 V=0:PRINT "dcalage (";-108+Z*3+INT(Y/2);" ";108-Z*3-INT(Y/2);" ) ";:INPUT V
7 GLCURSOR (108-Z*3-INT(Y/2)+V,0):SORGN
8 CLS:PPOKE &704E,PEEK &704E AND &F5:PAUSE "texte ?":Z=PEEK &7864*256:W=-1
9 V=-1
10 Z$=INKEY$:IF Z$="" GOTO 10
11 BEEP 1:POKE &704E,PEEK &704E AND &FD:IF ASC Z$=13 GOTO 40
12 IF ASC Z$=8 GOTO 45
13 IF ASC Z$=12 GOTO 47
14 IF ASC Z$<23 AND ASC Z$>16 LET Z$=CHR$(ASC Z$+16)
15 IF ASC Z$=9 GOSUB 50:GOTO 9
16 IF ASC Z$=1 LET V=-V:POKE &704E,PEEK &704E+2*(V=1):GOTO 10
17 IF ASC Z$=2 LET W=-W:POKE &704E,PEEK &704E+8*W:GOTO 10
18 IF Z$>"@" IF -W*V LET Z$=CHR$(ASC Z$+32)
19 IF -V GOTO 25
20 IF Z$="(" LET Z$="("
21 IF Z$=")" LET Z$=")"
22 IF Z$="=" LET Z$="@"
23 IF (Z$>")" AND Z$<",") OR (Z$="/") LET Z$=CHR$(ASC Z$+16)
24 IF Z$="-" LET Z$=","
25 IF ASC Z$=31 LET Z$=CHR$ 92
26 IF ASC Z$=10 LET Z$="(pi)"
27 IF ASC Z$=11 LET Z$="(racine)"
28 IF ASC Z$=24 LET Z$=CHR$ &7E
29 IF Z$=" " IF V LET Z$="^"
30 IF ASC Z$=25 PRINT PEEK &7864*256-Z:GOTO 9
31 IF ASC Z$=27 LET Z$=CHR$ 39
32 IF ASC Z$=15 TEXT:END
33 POKE Z-1,ASC Z$:GOSUB 60:GOTO 9
40 FOR U=PEEK &7864*256-1 TO Z STEP -1
41 IF PEEK U<>39 FOR V=1 TO X:FOR W=1 TO Y:GLCURSOR (W-1,V-1):LPRINT CHR$ PEEK U:NEXT W:NEXT V:SORGN:GLCURSOR (-Y+1,X):SORGN
42 NEXT U:GOTO 8
45 Z=Z+2
47 GOSUB 60:GOTO 9
50 W=0:INPUT "couleur (0  3) ?";W:IF ABS (W-2)>2 GOTO 50
51 COLOR W:W=-1:CLS:RETURN
60 CLS:Z=Z-1:V=PEEK &7864*256-Z:IF V>26 LET V=26
61 FOR U=-26 TO -27+V:CURSOR -U-1:PRINT CHR$ PEEK(Z+U+26):IF INKEY$ LET U=-27+U
62 NEXT U:RETURN